
#ifndef CORE_H_
#define CORE_H_

#ifdef __cplusplus
extern "C" {
#endif

struct aeEventLoop;
struct server;
struct thread;

// 核心的运行状态
#define CORE_STAT_INIT			0
#define CORE_STAT_RUN			1
#define CORE_STAT_STOP		2
#define CORE_STAT_STOPING	3

#define CORE_ERR						-1

// 每一个应用只能有唯一一个这样的一个core结构
typedef struct core {
	int workThreadNum;     // 工作线程的数量
	int serverNum;               //服务器数量（一个服务代表监听一个端口）
	int coreStat;                   // 核心的状态
	int nextServerId;
	int nextWorkThreadId;

	struct aeEventLoop* eventLoop; //事件核心
	struct server** serverList;    //服务器列表
	struct thread** workThreadList; //工作线程列表
} core;

struct core* initCore(int workThreadNum, int serverNum);
void destroyCore(struct core* c);

void stopCore(struct core* c);

int addServerCore(struct core* c, struct server* s);
void removeServerCore(struct core* c, struct server* s);

void eventLoopCore(struct core* c);

int dispathWorkThread(struct core* c, void* session);
void dispathSession(struct thread* t, void* session);

#ifdef __cplusplus
}
#endif

#endif /* CORE_H_ */
